In [2]:
%matplotlib inline
from pylab import *
from numpy import *
In [3]:
def Zrange(limits, nsampl=400):
rmin, rmax, imin, imax = limits
rsampl = max(nsampl, (rmax-rmin)/float(imax-imin)*nsampl)
isampl = max(nsampl, (imax-imin)/float(rmax-rmin)*nsampl)
r = linspace(rmin, rmax, rsampl)
i = linspace(imin, imax, rsampl)
R, I = meshgrid(r, i)
return R + 1j*I
In [4]:
X = Zrange([-1, 1, -1, 1])
In [5]:
# http://nbviewer.ipython.org/github/empet/Math/blob/master/DomainColoring.ipynb
figure(figsize=(6,6))
def Z2RGB(X):
# magnitude
V = log(abs(X))
V = (V - floor(V))
RGB=dstack((V, V, V))
# phase
R = ((angle(-X)/(2*pi)+.5)*2).clip(0,1)
G = ((angle(-X)/(2*pi))*2).clip(0,1)
B = zeros_like(R, float)
RGB3 = dstack((R, G, B))
# hard light blending
I = RGB3 < 0.5
RGB4 = 1-(1-2*(RGB3-0.5))*(1-RGB)
RGB4[I] = 2*RGB3[I]*RGB[I]
return RGB4
def Cplot(func, zlimits, nsampl = 400):
X = Zrange(zlimits, nsampl)
imshow(Z2RGB(func(X)), origin="lower", extent = zlimits)
limits = [-2, 2, -2, 2]
Cplot(lambda X: X, limits)
In [6]:
figure(figsize=(10, 5))
func = lambda X: sin(X)
Cplot(func, [-8, 8, -4, 4])
In [7]:
figure(figsize=(10, 5))
func = lambda X: -(1+X)/(1-X)
Cplot(func, [-4, 4, -2, 2])
In [8]:
figure(figsize=(10, 5))
func = lambda X: (X+2)**2 * (X-1-2j) * (X+1j)
Cplot(func, [-5, 4, -2, 1.7])
In [ ]: